package design.factory;

public class FactoryPatternDemo {
    /**
     * 工厂模式
     * 创建的时候只创建父类接口,具体方法由子类实现
     * 使用场景： 1、日志记录器：记录可能记录到本地硬盘、系统事件、远程服务器等，用户可以选择记录日志到什么地方。
     *          2、数据库访问，当用户不知道最后系统采用哪一类数据库，以及数据库可能有变化时。
     *          3、设计一个连接服务器的框架，需要三个协议，"POP3"、"IMAP"、"HTTP"，可以把这三个作为产品类，共同实现一个接口。
     *          4 消息发送  用户选择使用netty 还是 rabbitmq 来创建websocket,具体交给工厂创建的子类来实现发送消息,但调用 都是调接口的发送消息方法
     *          5. 支付  vx zfb 等 可以由工厂来创建对应的支付子类,都实现支付接口
     * @param args
     */
   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();
 
      //获取 Circle 的对象，并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
 
      //调用 Circle 的 draw 方法
      shape1.draw();
 
      //获取 Rectangle 的对象，并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
 
      //调用 Rectangle 的 draw 方法
      shape2.draw();
 
      //获取 Square 的对象，并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
 
      //调用 Square 的 draw 方法
      shape3.draw();
   }
}